package org.brisling.medical.service;

import java.util.List;

import org.brisling.base.domain.ListDomain;
import org.brisling.base.domain.RetDomain;
import org.brisling.common.ConstSysParam;
import org.brisling.medical.domain.BaseOutpatient;
import org.brisling.medical.queryService.QueryBaseOutpatientService;
import org.brisling.medical.repository.BaseOutpatientRepo;
import org.brisling.sysman.service.base.BaseSysmanService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;

@RestController
@RequestMapping("/baseOutpatient")
/**
 * 
 * <p>
 * Title: BaseOutpatientService
 * </p>
 * <p>
 * Description: 门诊信息服务类
 * </p>
 * <p>
 * Company: 长沙东勤信息科技发展有限公司
 * </p>
 * 
 * @author jackson wang
 * @since 1.0
 * @version 1.0
 * @date 2017年7月25日 上午11:54:48
 */
public class BaseOutpatientService extends BaseSysmanService<BaseOutpatient> {

	@SuppressWarnings("unused")
	@Autowired
	private BaseOutpatientRepo baseRepo;
	@Autowired
	private QueryBaseOutpatientService qryBaseOutpatientSer;

	public BaseOutpatientService() {
		this.moduleName = ConstSysParam.MODULE_BASE_OUTPATIENT;

	}

	/**
	 * 获取业务主页面
	 * 
	 * @return
	 */
	@RequestMapping("/mainPage.action")
	public ModelAndView getMainPage() {
		return getBizMainPage();
	}

	/**
	 * 获取业务编辑页面
	 * 
	 * @return
	 */
	@RequestMapping("/editPage.action")
	public ModelAndView getEditPage() {
		return getBizEditPage();
	}

	/**
	 * 分页查询用户列表页面
	 * 
	 * @param deptid
	 * @param page
	 * @param rows
	 * @param sort
	 * @return
	 */
	@RequestMapping("/getListDomain.action")
	public ListDomain<BaseOutpatient> getListDomain(@RequestParam(value = "page", required = false) String page,
			@RequestParam(value = "rows", required = false) String rows,
			@RequestParam(value = "sort", required = false) String sort) {

		return super.getPagedList(page, rows);

	}

	/**
	 * 分页查询用户列表页面
	 * 
	 * @param deptid
	 * @param page
	 * @param rows
	 * @param sort
	 * @return
	 */
	@RequestMapping("/getList.action")
	public List<BaseOutpatient> getPagedListRows(@RequestParam(value = "page", required = false) String page,
			@RequestParam(value = "rows", required = false) String rows,
			@RequestParam(value = "sort", required = false) String sort) {

		return super.getAll(page, rows, getSort(sort));

	}

	/**
	 * 删除记录,单条或批量删除记录,id不为空，执行单条删除，id为空且ids不为空，执行批量删除
	 * 
	 * @param id
	 *            待删除的单条记录id
	 * @param ids
	 *            待删除的多条记录id，以','分隔
	 * @return
	 */
	@RequestMapping("/del.action")
	public RetDomain delRow(@RequestParam(value = "id", required = false) Long id,
			@RequestParam(value = "ids", required = false) String ids) {

		return super.delRows(id, ids);
	}

	/**
	 * 删除记录,单条或批量删除记录,id不为空，执行单条删除，id为空且ids不为空，执行批量删除
	 * 
	 * @param id
	 *            待删除的单条记录id
	 * @param ids
	 *            待删除的多条记录id，以','分隔
	 * @return
	 */
	@RequestMapping("/flowDel.action")
	public RetDomain delFlowRow(@RequestParam(value = "id", required = false) Long id,
			@RequestParam(value = "ids", required = false) String ids) {

		return delRow(id, ids);

	}

	/**
	 * 删除组织节点
	 * 
	 * @param id
	 */
	@RequestMapping("/save.action")
	public BaseOutpatient save(@RequestBody String body) {
		BaseOutpatient obj = bodyToObj(body, BaseOutpatient.class);
		super.save(obj);
		return obj;
	}

	/**
	 * 批量保存
	 * 
	 * @param lists
	 * @return
	 */
	public RetDomain save(List<BaseOutpatient> lists) {
		RetDomain domain = new RetDomain();
		if (lists != null && lists.size() > 0) {
			return super.saveList(lists);
		} else {
			domain.setErrorMsg("保存数据不能为空");
			return domain;
		}
	}

	/**
	 * 更新指标值
	 * 
	 * @param year_month
	 */
	public int updateStandard(String year_month) {
		String outsql = "update %1$s bm set (BM.AMOUNT_EVALUATE_TYPE_ID,BM.AMOUNT_PERCENT_STANDARD,BM.ACCOUNTING_DEPTID)= "
				+ "(select I.INDICATOR_EVALUE_TYPE_ID,I.INDICATOR_VALUE,I.ACCOUNTING_DEPTID from %2$s i "
				+ "where i.bizcode = 'in_antiDDD' and I.INDICATOR_PATIENT_TYPE_ID=BM.PATIENT_TYPE and I.INDICATOR_UNIT_ID=BM.DEPT_CODE ) "
				+ "where BM.MONITOR_YEAR_MONTH='%3$s'";
		outsql = String.format(outsql, this.moduleName, ConstSysParam.MODULE_INDICATION, year_month);
		return super.executeNativeDelOrUpdate(outsql);

	}

	/*
	 * 
	 */
	public List<BaseOutpatient> autoUpdata(Integer yearF, Integer monthF, Integer dayF, Integer yearT, Integer monthT,
			Integer dayT) {
		List<BaseOutpatient> lists = qryBaseOutpatientSer.autoMonitor(yearF, monthF, dayF, yearT, monthT, dayT);
		save(lists);
		return lists;
	}
}
